package pe.edu.sistemas.sisdiho.mappers;

import java.sql.Time;
import java.util.List;

import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;

import pe.edu.sistemas.sisdiho.entities.RegistroHorario;

public interface RegistroHorarioMapper {
	@Select("SELECT DISTINCT(h.IDHORARIO_CLASE), "
			+ "CONCAT (p.PERSONA_APPATERNO,' ',p.PERSONA_APMATERNO,' , ',p.PERSONA_NOMBRE) as nombreDocente, "
			+ "h.IDHORARIO_CLASE as idClase, "
			+ "c.CURSO_PERIODO_NOMBRE as curso, "
			+ "e.escuela_nombre as escuela, "
			+ "g.GRUPO_NUMERO as grupo, "
			+ "a.NOMBRE as aula, "
			+ "h.DIA as dia, "
			+ "h.HORA_INICIO as hInicio, "
			+ "h.HORA_FIN as hFin, "
			+ "h.HORARIO_CLASE_TIPO as tipo "
			+ "FROM PERSONA p , DOCENTE d , CURSO_PERIODO c , GRUPO g , AULA a , HORARIO_CLASE h , CURSO_CONJUNTO cc , CURSO_BASE cb , PLAN pl , ESCUELA e "
			+ "WHERE (h.HORARIO_CLASE_TIPO='TEORIA' OR h.HORARIO_CLASE_TIPO='PRACTICA') "
			+ "AND h.HORARIO_CLASE_PERIODO=#{periodo} "
			+ "and h.GRUPO_IDGRUPO=g.IDGRUPO "
			+ "and h.DOCENTE_IDDOCENTE=d.IDDOCENTE "
			+ "and d.PERSONA_ID_PERSONA=p.ID_PERSONA "
			+ "and h.GRUPO_IDGRUPO=g.IDGRUPO "
			+ "and g.CURSO_IDCURSO=c.IDCURSO_PERIODO "
			+ "and c.CURSO_PERIODO_CURSOC_CODCOMUN=cc.CURSOC_CODCOMUN "
			+ "and cc.CURSOC_IDCURSO_GENERAL=cb.IDCURSO_GENERAL "
			+ "AND cb.PLAN_ID_PLAN=pl.IDPLAN "
			+ "AND pl.ESCUELA_IDESCUELA=e.IDESCUELA "
			+ "and (h.AULA_IDAULA=a.IDAULA OR h.AULA_IDAULA is NULL) "
			+ "ORDER BY h.dia, h.hora_inicio,p.persona_appaterno")
	public List<RegistroHorario> obtenerHorariosAulas(@Param("periodo") String periodo);
	
	@Update ("UPDATE HORARIO_CLASE,AULA "
			+ "SET HORARIO_CLASE.AULA_IDAULA=#{idAula} , HORARIO_CLASE.AULA=AULA.NOMBRE "
			+ "WHERE (IDHORARIO_CLASE=#{idClase} AND AULA.IDAULA=#{idAula})")
	public void actualizarAula(@Param("idAula") int idAula , @Param("idClase") int idClase);
	
	@Select("SELECT DISTINCT(h.IDHORARIO_CLASE) as idClase, "
			+ "CONCAT (p.PERSONA_APPATERNO,' ',p.PERSONA_APMATERNO,' , ',p.PERSONA_NOMBRE) as nombreDocente, "
			+ "cb.cursob_nombre as curso, e.escuela_nombre as escuela, "
			+ "h.DIA as dia, h.HORA_INICIO as hInicio, h.HORA_FIN as hFin, a.NOMBRE as aula, h.HORARIO_CLASE_TIPO as tipo, "
			+ "g.grupo_numero as grupo, h.horario_clase_tipo as tipo "
			+ " from HORARIO_CLASE h, PERSONA p, CURSO_BASE cb, ESCUELA e, GRUPO g, CURSO_PERIODO cp, "
			+ "CURSO_CONJUNTO cc, PLAN pl, DOCENTE d, AULA a "
			+ "where h.horario_clase_tipo = 'LABORATORIO' "
			+ "AND h.docente_iddocente = d.iddocente "
			+ "AND a.idaula = h.aula_idaula "
			+ "AND d.persona_id_persona = p.id_persona "
			+ "AND h.GRUPO_IDGRUPO = g.IDGRUPO "
			+ "AND h.HORARIO_CLASE_PERIODO=#{periodo} "
			+ "AND g.CURSO_IDCURSO = cp.IDCURSO_PERIODO "
			+ "AND cp.CURSO_PERIODO_CURSOC_CODCOMUN = cc.CURSOC_CODCOMUN "
			+ "AND cc.CURSOC_IDCURSO_GENERAL = cb.IDCURSO_GENERAL "
			+ "AND cb.PLAN_ID_PLAN = pl.IDPLAN "
			+ "AND pl.ESCUELA_IDESCUELA = e.IDESCUELA "
			+ "ORDER BY h.dia, h.hora_inicio,p.persona_appaterno")
	public List<RegistroHorario> obtenerHoraiosLaboratorios(@Param("periodo") String periodo);
	
	@Select ("SELECT DISTINCT(h.IDHORARIO_CLASE), "
			+ "CONCAT (p.PERSONA_APPATERNO,' ',p.PERSONA_APMATERNO,' , ',p.PERSONA_NOMBRE) as nombreDocente, "
			+ "h.IDHORARIO_CLASE as idClase, "
			+ "c.CURSO_PERIODO_NOMBRE as curso, "
			+ "g.GRUPO_NUMERO as grupo, "
			+ "h.AULA as aula, "
			+ "h.DIA as dia, "
			+ "h.HORA_INICIO as hInicio, "
			+ "h.HORA_FIN as hFin "
			+ "FROM PERSONA p , DOCENTE d , CURSO_PERIODO c , GRUPO g , AULA a , HORARIO_CLASE h "
			+ "WHERE h.HORARIO_CLASE_PERIODO=#{periodo} "
			+ "AND h.GRUPO_IDGRUPO=g.IDGRUPO "
			+ "AND h.DOCENTE_IDDOCENTE=d.IDDOCENTE "
			+ "AND d.PERSONA_ID_PERSONA=p.ID_PERSONA "
			+ "AND h.GRUPO_IDGRUPO=g.IDGRUPO "
			+ "AND g.CURSO_IDCURSO=c.IDCURSO_PERIODO "
			+ "AND h.AULA_IDAULA=a.IDAULA "
			+ "AND h.AULA_IDAULA=#{idAula} "
			+ "AND h.DIA=#{dia} "
			+ "AND ((h.HORA_INICIO <=  #{hInicio} AND  h.HORA_FIN > #{hInicio}) "
			+ "OR (h.HORA_INICIO <  #{hFin} AND  h.HORA_FIN >=  #{hFin})) "
			+ "ORDER BY h.DIA,h.HORA_INICIO,p.PERSONA_APPATERNO")
	public List<RegistroHorario> obtenerCruce(@Param("idAula") int idAula,@Param("hInicio") Time hInicio,
			@Param("hFin") Time hFin,@Param("dia") int dia,@Param("periodo") String periodo);
	
	
}
